package threading;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ws
 * Date: 2023-07-03
 * Time: 17:37
 */
public class ThreadDemo10 {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            //currentThread 是获取当前的线程实例，即currentThread == t
            //isInterrupted 就是t对象自带的一个标志位
            //默认是false，一直不中断
            //Thread tDemo = Thread.currentThread();
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("Hello t");
                try {
                    Thread.sleep(1000);//睡眠阻塞
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    //break;//改变标志位后，直接结束
                }
            }
        });

        t.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //1. 把t内部的标志位改为true
        //2. 如果该线程（t线程）正在阻塞（如：sleep()/wait()），此时就会把阻塞状态直接唤醒（通过抛出异常的方式直接让sleep()立即结束）
        t.interrupt();
        //3. sleep()被唤醒后，会自动地把isInterrupted的标志位给清空（true->false)
        //所以抛出异常后，会继续打印Hello t（因为isInterrupted已经改回来了）
    }
}
